---
sidebar_position: 1
position: 1
id: normal_deploy
title: 常规部署
---

---

## 数据库初始化

Dinky 采用 mysql 作为后端的存储库，mysql 支持 5.7+。这里假设你已经安装了 mysql 。首先需要创建 Dinky 的后端数据库，这里以配置文件中默认库创建。

在 Dinky 根目录 sql 文件夹下分别放置了 dinky-mysql.sql 、 upgrade/${version}_schema/mysql/ddl 和 dml。如果第一次部署，可以直接将 sql/dinky-mysql.sql 文件在 dinky 数据库下执行。（如果之前已经部署，那 upgrade 目录下存放了各版本的升级 sql ，根据版本号按需执行即可）

<Tabs groupId="operating-systems">
<TabItem value="mysql5" label="mysql-5.x" default>

```sql
#登录mysql
mysql -uroot -p
#创建数据库
mysql>
create database dinky;
#授权
mysql>
grant all privileges on dinky.* to 'dinky'@'%' identified by 'dinky' with grant option;
mysql>
flush privileges;
#此处用 dinky 用户登录
mysql -h fdw1 -udinky -pdinky
```

</TabItem>
<TabItem value="mysql8" label="mysql-8.x">

```sql
#登录mysql
mysql -uroot -p
#创建数据库
mysql>
CREATE DATABASE dinky;
#创建用户并允许远程登录
mysql>
create user 'dinky'@'%' IDENTIFIED WITH mysql_native_password by 'dinky';
#授权
mysql>
grant ALL PRIVILEGES ON dinky.* to 'dinky'@'%';
mysql>
flush privileges;
```

</TabItem>
</Tabs>


#### 第一次部署

```sql
#首先登录 mysql
mysql -h fdw1  -udinky -pdinky
mysql> use dinky;
mysql> source /opt/dinky/sql/dinky-mysql.sql
```


## Dinky 部署


import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';

<Tabs groupId="operating-systems">
<TabItem value="linux" label="Linux" default>

** 解压到指定目录 **

Dinky 不依赖任何外部的 Hadoop 或者 Flink 环境，可以单独部署在 flink、 hadoop 和 K8S 集群之外，完全解耦，支持同时连接多个不同的集群实例进行运维。

```shell
tar -zxf dinky-release-${version}.tar.gz
mv dinky-release-${version} dinky
cd dinky
```

</TabItem>
</Tabs>


### 配置文件

创建好数据库后，修改 Dinky 配置文件，选择默认数据源为 mysql。

```shell
cd /opt/dinky/config/
vim application.yml
# 修改 Dinky 所使用的数据库类型为 mysql
spring:
  application:
    name: Dinky
  profiles:
    # The h2 database is used by default. If you need to use other databases, please set the configuration active to: mysql, currently supports [mysql, pgsql, h2]
    # If you use mysql database, please configure mysql database connection information in application-mysql.yml
    # If you use pgsql database, please configure pgsql database connection information in application-pgsql.yml
    # If you use the h2 database, please configure the h2 database connection information in application-h2.yml,
    # note: the h2 database is only for experience use, and the related data that has been created cannot be migrated, please use it with caution
    active: ${DB_ACTIVE:mysql} #[h2,mysql,pgsql]
    include: jmx
```

修改 Dinky 的 mysql 的配置文件。

```shell
vim application-mysql.yml
# 修改 Dinky 的 mysql 链接配置
spring:
  datasource:
    url: jdbc:mysql://${MYSQL_ADDR:127.0.0.1:3306}/${MYSQL_DATABASE:dinky}?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false&zeroDateTimeBehavior=convertToNull&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
    username: ${MYSQL_USERNAME:dinky}
    password: ${MYSQL_PASSWORD:dinky}
    driver-class-name: com.mysql.cj.jdbc.Driver
```

### 上传依赖

Dinky 需要具备内置的 Flink 环境，该 Flink 环境的实现需要用户自己在 Dinky 根目录下 extends/flink${FLINK_VERSION} 文件夹上传相关的 Flink 依赖，如 flink-dist, flink-table 等，具体见下文。当然也可在启动文件中指定 FLINK_HOME，但不建议这样做。

:::warning 注意事项
1. Dinky 并没有内置的 mysql/postgres 数据库驱动，需要用户自己上传 mysql-connector-java-xxx.jar/postgresql-xxx.jar 等jdbc 驱动到 lib 下/extends 下
2. Dinky 当前版本的 yarn 的 per-job 与 application 执行模式依赖 flink-shade-hadoop ，如果你的 Hadoop 版本为 2+ 或 3+，需要额外添加 flink-shade-hadoop-uber-3 包，请手动删除该包内部的 javax.servlet 等冲突内容。
当然如果你的 Hadoop 为 3+ 也可以自行编译对于版本的 dinky-client-hadoop.jar 以替代 uber 包，
3. Dinky所有监控相关功能目前强依赖hadoop，即使你不需要任何hadoop功能，也需要上传hadoop相关依赖，否则会导致监控功能无法正常使用，建议添加`flink-shade-hadoop`
:::

将 flink-shade-hadoop 上传到到 plugins 文件目录下，使用 flink-shade-hadoop-3 地址如下：

```
https://mvnrepository.com/artifact/org.apache.flink/flink-shaded-hadoop-3-uber?repo=cloudera-repos
```

dinky默认不包含mysql，postgres等数据库驱动，请自行下载相关依赖到lib或extends目录下

如果是 CDH 及 HDP 使用开源 flink-shade 对 Dinky 目前没有影响，其他用到的依赖取决于 CDH 或者 HDP 与开源版本的兼容性，需要自行根据兼容性添加依赖即可正常使用 Dinky 的所有功能。

最终项目根目录如下，仅供参考：

```
├── auto.sh -- 启动停止脚本
├── config -- 配置文件
│   ├── jmx
│   │   └── jmx_exporter_config.yaml -- JMX 监控集成
│   ├── application.yml -- 主要程序运行配置文件
│   ├── application-h2.yml -- h2 配置文件
│   ├── application-jmx.yml -- jmx 配置文件
│   ├── application-mysql.yml -- mysql 配置文件
│   ├── application-pgsql.yml -- pgsql 配置文件
│   ├── DinkyFlinkDockerfile -- k8s 集群配置自动构建镜像的Dockerfile
│   └── log4j2.xml -- 日志配置
├── dinky-loader
│   ├── ExpressionVariableClass -- 全局变量动态加载的表达式扫描配置文件
│   └── FlinkConfClass -- 全局变量动态加载 Flink 配置的扫描配置文件
├── extends
│   ├── flink1.14  -- 适配 Flink1.14.x
│   │   └── dinky
│   │       ├── dinky-catalog-mysql-1.14-${VERSION}.jar -- dinky 的 catalog 实现
│   │       ├── dinky-client-1.14-${VERSION}.jar
│   │       └── dinky-connector-jdbc-1.14-${VERSION}.jar -- dinky 的 jdbc 连接器增强实现
│   ├── flink1.15  -- 适配 Flink1.15.x
│   │   └── dinky
│   │       ├── dinky-catalog-mysql-1.15-${VERSION}.jar -- dinky 的 catalog 实现
│   │       └── dinky-client-1.15-${VERSION}.jar
│   ├── flink1.16  -- 适配 Flink1.16.x
│   │   └── dinky
│   │       ├── dinky-catalog-mysql-1.16-${VERSION}.jar -- dinky 的 catalog 实现
│   │       └── dinky-client-1.16-${VERSION}.jar
│   ├── flink1.17  -- 适配 Flink1.17.x
│   │   └── dinky
│   │       ├── dinky-catalog-mysql-1.17-${VERSION}.jar -- dinky 的 catalog 实现
│   │       └── dinky-client-1.17-${VERSION}.jar
│   └── flink1.18  -- 适配 Flink1.18.x
│   │   └── dinky
│   │       ├── dinky-catalog-mysql-1.18-${VERSION}.jar -- dinky 的 catalog 实现
│   │       └── dinky-client-1.18-${VERSION}.jar
├── jar
│   ├── dinky-app-1.14-${VERSION}-jar-with-dependencies.jar -- 适配 Flink1.14.x application
│   ├── dinky-app-1.15-${VERSION}-jar-with-dependencies.jar -- 适配 Flink1.15.x application
│   ├── dinky-app-1.16-${VERSION}-jar-with-dependencies.jar -- 适配 Flink1.16.x application
│   ├── dinky-app-1.17-${VERSION}-jar-with-dependencies.jar -- 适配 Flink1.17.x application
│   └── dinky-app-1.18-${VERSION}-jar-with-dependencies.jar -- 适配 Flink1.18.x application
├── lib
│   └── ... -- Dinky 的内部依赖
└── sql
    ├── dinky-mysql.sql -- Mysql 首次初始化脚本
    ├── dinky-pg.sql -- PGSql 首次初始化脚本
    └── upgrade  -- 各个版本的升级 SQL
```
对应 `Flink` 版本的依赖，放在Dinky 安装目录下 extends/flink${FLINK_VERSION} 下，例如：
```shell
clickhouse-jdbc-0.2.6.jar
flink-cep-1.16.1.jar
flink-connector-files-1.16.1.jar
flink-connector-jdbc-1.16.1.jar
flink-csv-1.16.1.jar
flink-dist-1.16.1.jar
flink-doris-connector-1.16-1.3.0.jar
flink-json-1.16.1.jar
flink-scala_2.12-1.16.1.jar
flink-shaded-hadoop-2-uber-2.7.5-8.0.jar
flink-shaded-zookeeper-3.5.9.jar
flink-sql-connector-hbase-1.4-1.16.1.jar
flink-sql-connector-kafka-1.16.1.jar
flink-sql-connector-mysql-cdc-2.4.1.jar
flink-sql-connector-oracle-cdc-2.4.1.jar
flink-table-api-java-uber-1.16.1.jar
flink-table-planner_2.12-1.16.1.jar        !!!特别注意,flink自带lib里的planner是带loader的,比如:flink-table-planner-loader-1.16.1.jar, 此处需要一个不带loader的jar, 可前往flink根下的opt目录中找到
flink-table-runtime-1.16.1.jar
log4j-1.2-api-2.17.1.jar
log4j-api-2.17.1.jar
log4j-core-2.17.1.jar
log4j-slf4j-impl-2.17.1.jar
mssql-jdbc-8.2.2.jre8.jar
mysql-connector-java-8.0.13.jar
orai18n-19.7.0.0.jar
```
:::tip
1.0.0 之前的版本 Flink 相关依赖是放在 plugins 目录下，1.0.0 及之后是放在 extends 目录下。（目前做了 plugins 目录的兼容，即放在 plugins 下也会生效）

推荐公共 jar 包放在 extends 目录下，Flink 版本的依赖放在 extends/flink${FLINK_VERSION} 下
:::

### 启动 Dinky

```shell
#启动
sh auto.sh start
#停止
sh auto.sh stop
#重启
sh auto.sh restart
#查看状态
sh auto.sh status
```

#### 版本适配
启动指令的第二个参数则是版本选择，支持 【1.14, 1.15, 1.16, 1.17, 1.18】,参考指令如下：
```shell
#启动
sh auto.sh start 1.16
```

:::tip 说明
服务启动后，默认端口 8888，[http://127.0.0.1:8888](http://127.0.0.1:8888) , 默认用户名/密码: admin/admin

Dinky 部署需要 MySQL5.7 以上版本

:::

